/**
 * @author: shiding
 * @data: 2022/5/20 15:52
 **/

import java.util.Arrays;
import java.util.Vector;

/**
 * 167 题「 两数之和 II」
 */
public class TwoSum {

    public static void main(String[] args) {
        int arr[] = {2,3,4};
        int target = 6;
        int[] ints = twoSum2(arr, target);
        System.out.println("ss:" + ints.toString());
    }


    /**
     * 前后 执政双循环 计算
     * @param numbers
     * @param target
     * @return
     */
    public static int[] twoSum(int[] numbers, int target) {
        int[] arr=new int[2];
        int size  =  numbers.length;
        for (int i = 0; i <size;i++) {
            for (int j = i+1; j < size; j++) {
                if ( numbers[i] + numbers[j] == target) {
                    arr[0] = i+1;
                    arr[1] = j+1;
                    return arr;
                }
            }
        }
        return arr;
    }

    /**
     * 左右指针 是 双指针的另一种形态
     * 由于 题型中的 数组 顺序是 有序，可以借用 双指针 实现类似 二分查找的操作
     * 减少双层循环遍历
     * @param numbers
     * @param target
     * @return
     */
    public static int[] twoSum2(int[] numbers, int target) {
        String s = "asdaf";
        char[] chars = s.toCharArray();
        int left = 0;
        int right = numbers.length  -1;
        while (left < right) {
            int sum = numbers[left] +  numbers[right];
            if (sum == target) {
                return new int[]{left+1, right+1};
            } else if (sum < target) {
                left++;
            } else if (sum > target) {
                right--;
            }
        }
        return new int[2];
    }


}
